package net.realsee.domain.wcs.rcs.irayple;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.List;

/**
 * 华睿任务下发参数
 *
 * @author 戴俊宇
 * @since 2023/10/30 上午 09:58
 **/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class IRayPleAddTaskReq {

    /**
     * 业务流程名称编号。一类生产业务流程 名称对应着一个编号。
     * 可以在 RCS 第三方端上查询“业务流程模板”页的“业务流程编号”获取对应编号
     */
    private String modelProcessCode;

    /**
     * 优先级：
     * 4：高
     * 6：中
     * 8：低
     * 高优先级的任务将会被优先调度，默认为 6
     */
    private Integer priority;

    /**
     * 来源系统：下发任务的第三方系统，由第三方系统自定义。如：MES、WMS等
     */
    private String fromSystem;

    /**
     * 任务单号：需要第三方系统下发任务时指定且保证每次的任务单号唯一且和之前不重复
     */
    private String orderId;

    /**
     * 任务单详情
     */
    private List<TaskOrderDetail> taskOrderDetail;

    @Data
    @Builder
    public static class TaskOrderDetail {

        /**
         * 任务路径点集：AMR 运行的起始点位，目标点位；多个点位间用英文逗号分隔。
         * 下发任务时支持传入 RCS 上面维护的片区域编号，传入后，由 RCS 负责从传入的片区域中选择可用点位
         * （RCS 需要维护片区域中的每个点位的库位信息）
         */
        private String taskPath;

        /**
         * 货架编号：如果需要，则第三方系统下 发货架时赋值
         */
        private String shelfNumber;

        /**
         * 允许执行的设备序列号或设备编号，多个设备时，用英文逗号分隔。
         * 详细参数 可参考设备管理>AMR管理
         */
        private String assignRobotIds;

        /**
         * 此任务执行完成后是否释放 AMR:任务结束不释放 AMR；其他，释放 AMR。
         * 如果不释放，可以指定该车执行后续任务
         */
        private Integer releaseRobot;

        /**
         * 执行该任务的设备编号，为设备管理>AMR管理中 4 位的编号值。
         * 只能传入一个 AMR 设备编号。仅限于不释放车，关联订单使用
         */
        private String deviceNum;

        /**
         * AGV 不同负载状态下，AMR 运行限速可在 RCS 系统定制配置
         * 默认负载状态：
         * 1：空货架状态
         * 2：半满货架状态
         * 3：全满状态
         */
        private Integer loadType;

        /**
         * 负载类型：
         * 1：正方形货架
         * 2：长方形货架
         * 3：牵引负载
         * 4：栈板
         * 7：叉车料箱
         * 8：长方形栈板
         */
        private Integer shelfModel;


    }
}
